from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
import os

# 配置参数
FTP_PORT = 21
FTP_USER = "user"
FTP_PASSWORD = "123456"
FTP_DIRECTORY = r""  # 修改为你的FTP根目录

def main():
    FTP_DIRECTORY = input("选择文件夹作为ftp服务器> ")
    if not os.path.exists(FTP_DIRECTORY):
        os.makedirs(FTP_DIRECTORY)

    # 实例化虚拟授权器
    authorizer = DummyAuthorizer()

    # 添加用户：用户名、密码、目录、权限
    authorizer.add_user(    
        FTP_USER, 
        FTP_PASSWORD, 
        FTP_DIRECTORY, 
        perm="elradfmw"  # 权限设置：e(改变目录)、l(列表文件)、r(下载)、a(追加文件)、d(删除文件)、f(重命名文件)、m(创建目录)、w(上传文件)
    )

    # 匿名登录配置（如需禁用请注释掉）
    # authorizer.add_anonymous(FTP_DIRECTORY)

    handler = FTPHandler
    handler.authorizer = authorizer
    
    # 自定义欢迎信息
    handler.banner = "PyFTPdlib Server ready."
    
    # 限制连接数
    handler.max_cons = 128
    handler.max_cons_per_ip = 5

    address = ('0.0.0.0', FTP_PORT)
    server = FTPServer(address, handler)

    # 设置最大传输速率 (KB/s)（None表示不限速）
    server.max_upload_speed = None
    server.max_download_speed = None

    try:
        print(f"Starting FTP server on port {FTP_PORT}, directory: {FTP_DIRECTORY}")
        server.serve_forever()
    except KeyboardInterrupt:
        print("FTP server stopped.")
        server.close_all()

if __name__ == '__main__':
    main()